let handlePageList = async (_this, url, listName) => {
  //处理分页的
  let res = await _this.$http.get(url, {
    params: _this.searchParam
  });
  if (res.data.success) {
    _this[listName] = res.data.list;
    _this.option.counts = res.data.counts;
  } else {
    _this.$message.error(res.data.message);
  }
}

let handleMessage = (_self, res) => {
  //处理删和改的弹框
  if (res.success) {
    _self.$message({
      type: "success",
      message: res.message
    });
  } else if (!res.success) {
    _self.$message({
      type: "warning",
      message: res.message
    });
  }
}

let readExcel = (_self, file, XLSX, status) => {
  let _this = _self;
  return new Promise(function (resolve, reject) {
    const reader = new FileReader();
    reader.onload = e => {
      //异步执行读取操作
      try {
        //以二进制的方式读取得到整份excel表格对象
        var data = e.target.result,
          workbook = XLSX.read(data, {
            type: "binary"
          });
      } catch (error) {
        reject(error.message);
      }
      // console.log(
      //   //这里使用的xlsx.js自带的工具，将其转化为json格式的数据
      //   XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]])
      // );
      let sheetList = XLSX.utils.sheet_to_json(
        workbook.Sheets[workbook.SheetNames[0]]
      );
      let idcardReg = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
      //上面那个是进行身份证验证的正则表达式
      if (status == 'teacher') {
        let errorMessage = ""
        _this.batchPushList = sheetList.map((item, index) => {
          //map会将返回的项组成数据给与赋值对象
          let outItem = {};
          if (!idcardReg.test(item["身份证"])) {
            _this.$message.error(
              `第${index + 1}行，身份证号码输入格式有误，请修改后导入数据`
            );
            reject(false);
          }
          outItem = {
            nid: item["教师编号"],
            identity: item["身份证"].toString(),
            name: item["姓名"],
            sex: item["性别"],
            position: item["职位"],
            phone: item["手机号码"].toString(),
            address: item["家庭地址"]
          };
          _this.departmentList.list.forEach((titem, tindex) => {
            if (titem.nid == item["系别编号"]) {
              outItem.department = titem._id;
            }
          });
          if (!outItem.department) {
            _this.$message.error(
              `第${index + 1}行系别编号不存在，情修改后再导入数据`
            );
            reject(false);
          }
          if (!idcardReg.test(item["身份证"])) {
            errorMessage += `第${index + 1}行，身份证号码输入格式有误，请修改后再导入数据`
          }
          return outItem;

        });
        if (errorMessage) {

          _this.$alert(errorMessage, '警告', {
            confirmButtonText: '确定',
            callback: action => {}
          })
          reject(false);
        }
      } else if (status == 'student') {
        let errorMessage = ""
        _this.batchPushList = sheetList.map((item, index) => {
          //map会将返回的项组成数据给与赋值对象
          let outItem = {};
          outItem = {
            nid: item["学号"].toString(),
            identity: item["身份证号码"].toString(),
            name: item["姓名"],
            sex: item["性别"],
            xn: item["入学年份"].toString(),
            phone: item["手机号码"].toString(),
            address: item["家庭地址"],
            source: item['来源地'],
            nation: item['民族'],
            nativeplace: item['籍贯']
          };
          _this.specialyNumList.list.forEach((titem, tindex) => {
            if (titem.nid == item["所属专业编号"]) {
              outItem.specialty = titem._id;
            }
          });
          _this.classNumList.list.forEach((titem, tindex) => {
            if (titem.nid == item["班级编号"]) {
              outItem.class = titem._id;
            }
          });
          if (!idcardReg.test(item["身份证号码"])) {
            errorMessage += `第${index + 1}行，身份证号码输入格式有误，请修改后再导入数据`
          }
          if (!outItem.specialty) {
            errorMessage += `第${index + 1}行专业编号不存在，情修改后再导入数据；`
          }
          if (!outItem.class) {
            errorMessage += `第${index + 1}行班级编号不存在，情修改后再导入数据；`
          }
          return outItem;
        });
        if (errorMessage) {

          _this.$alert(errorMessage, '警告', {
            confirmButtonText: '确定',
            callback: action => {}
          })
          reject(false);
        }
      } else if (status == 'class') {
        let messageString = ''
        _this.batchPushList = sheetList.map((item, index) => {
          //map会将返回的项组成数据给与赋值对象
          let outItem = {};
          outItem = {
            nid: item["班级编号"],
            year: item["所属学年"].toString(),
            dean: item['班主任']
          };
          _this.specialyNumList.forEach((titem, tindex) => {
            if (titem.nid == item["所属专业编号"]) {
              outItem.superior = titem._id;
              outItem.name = item["所属学年"].toString().slice(2) + titem.name + item["班级班次"];
            }
          });
          if (!outItem.superior) {
            messageString += `第${index + 1}行专业编号不存在，情修改后再导入数据`
          }
          return outItem;
        });
        if (messageString) {
          _this.$alert(messageString, '警告', {
            confirmButtonText: '确定',
            callback: action => {}
          })
          reject(false);
        }
      } else if (status == 'mustSchedule') {
        //TODO:这里身份变为mustSchedule，代表必定会开课的。
        let messageString = "";
        _this.mustInfo.batchPushList = sheetList.map((item, index) => {
          //map会将返回的项组成数据给与赋值对象
          let outItem = {};
          outItem = {
            coursename: item["课程名字"].toString(),
            teacher: item["教师编号"].toString(),
            coursenature: item["课程性质"],
            specialty: item["所属专业编号"].toString(),
            time: item["上课时间"].toString(),
            year: item["学年"].toString(),
            xq: item['学期'].toString(),
            address: item['上课地点'],
            week: item['上课周长'],
            classNid:item['上课班级编号'].toString(),
            zxf:item['总学分'],
            zjd:item['总绩点']
          };
          return outItem;
        });
        if (messageString) {
          _this.$alert(messageString, '警告', {
            confirmButtonText: '确定',
            callback: action => {}
          })
          reject(false);
        }
      } else if (status == "chooseSchedule") {
        //TODO:这是选修课，不会一定开，所以ShowCours里面没有它，需要点击确定开课的时候，才会进入
        //  然后建个选修课的表，里面存着信息
        //选修和必修存在同一个表里，然后通过搜索不同性质的，来搜索它们
        //然后有个 ShowChooseCours，里面是和showCours一样的结构，在有学生选课的时候，自动生成
        //这样就不会有问题了，选课的先不做，先做完必修课模块，选课可以放一放
      }
      resolve(true);
    };
    reader.readAsBinaryString(file);
  })
}

module.exports = {
  handlePageList,
  handleMessage,
  readExcel
}